package com.mjk.common.core.jdbc.service.idgenerator.impl;

import com.mjk.common.base.model.BaseEntity;
import com.mjk.common.core.jdbc.service.idgenerator.IdGenerator;
import com.mjk.common.util.StrUtils;
import com.mjk.common.util.TimeUtils;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * 自定义规则ID生成器 规则为时间 + 序号
 * 可以根据不通的字段生成不通的每天序号
 * 比如 A表的序列和B表不重复
 */

public class DateSeqGeneratorImpl implements IdGenerator {
    /**
     * 序列保存
     */
    private Map<String, Integer> maxMap = new HashMap<>();
    /**
     * 序列长度5
     */
    private int seq_lenght = 5;

    @Override
    public String getId(BaseEntity entity) {
        StringBuilder sb = new StringBuilder();
        sb.append(TimeUtils.formatTime(new Date(), TimeUtils.DATE_FORMAT_DATETIME_SHORT));
        //获取主键
        String key = getKey(entity);
        if (maxMap.containsKey(key)) {
            Integer currentValue = maxMap.get(key) + 1;
            maxMap.put(key, currentValue);
            sb.append(StrUtils.addZero(currentValue + "", seq_lenght));
            return sb.toString();
        }
        //如果不存在需要表里面获取最大值
        maxMap.put(key, 1);
        sb.append(StrUtils.addZero("1", seq_lenght));
        return sb.toString();
    }
}
